package com.travelsmart.client.apresentacao.view.subview;

import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.travelsmart.client.apresentacao.i18n.I18nConstantes;
import com.travelsmart.client.apresentacao.i18n.I18nMessages;
import com.travelsmart.client.apresentacao.view.BaseView;
import com.travelsmart.client.apresentacao.widget.FormListBox;
import com.travelsmart.client.apresentacao.widget.FormRadioButton;
import com.travelsmart.client.apresentacao.widget.FormTextBox;
import com.travelsmart.client.apresentacao.widget.FormWidget;
import com.travelsmart.client.bean.to.BandeiraCartaoCredito;
import com.travelsmart.client.bean.to.CartaoCreditoTO;

public class ViewCartao extends BaseView {

	//# INICIO - EXERC. 6
		private final FormTextBox txt_nomePagante = new FormTextBox("txt_nomePagante",
				I18nMessages.INSTANCE.help_nome_pagante(), 20,
				new FormWidget.HandlerValidation<String>() {
					@Override
					public boolean handle(String valor) {
						boolean retorno = true;
						if (valor == null || valor.trim().equals("")) {
							msg.setHTML(I18nMessages.INSTANCE
									.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
											.nome_pagante()));
							retorno = false;
						} else {
							if (valor.length() > 20) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_TAMANHO_MAX_CAMPO(
												I18nMessages.INSTANCE
														.nome_pagante(), 20));
								retorno = false;
							} else {
								if (!valor.matches("\\w+")) {
									msg.setHTML(I18nMessages.INSTANCE
											.MSG_CAMPO_FORMATO_INCORRETO(
													I18nMessages.INSTANCE
															.nome_pagante(),
													I18nMessages.INSTANCE
															.alfa_numerico()));
									retorno = false;
								}
							}
						}
						return retorno;
					}
				});
		private final FormTextBox txt_sobrenomePagante = new FormTextBox("txt_sobrenomePagante",
				I18nMessages.INSTANCE.help_sobrenome_pagante(), 20,
				new FormWidget.HandlerValidation<String>() {
					@Override
					public boolean handle(String valor) {
						boolean retorno = true;
						if (valor == null || valor.trim().equals("")) {
							msg.setHTML(I18nMessages.INSTANCE
									.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
											.sobrenome_pagante()));
							retorno = false;
						} else {
							if (!valor.matches("[a-zA-Z]{1,20}")) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_TAMANHO_MAX_CAMPO(
												I18nMessages.INSTANCE
														.sobrenome_pagante(),
												20));
								retorno = false;
							}
						}
						return retorno;
					}
				});
		private final FormRadioButton frb_bandeiraCartao = new FormRadioButton(
				I18nMessages.INSTANCE.help_bandeira_cartao(),
				"bandeira_cartao", false,
				I18nConstantes.INSTANCE.bandeiras_cartao(),
				new FormWidget.HandlerValidation<String>() {
					@Override
					public boolean handle(String valor) {
						boolean retorno = true;
						if (valor == null || valor.trim().equals("")) {
							retorno = false;
							msg.setHTML(I18nMessages.INSTANCE
									.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
											.bandeira_cartao()));
						}
						return retorno;
					}

				});
		private final FormTextBox txt_numeroCartao = new FormTextBox("txt_numeroCartao",
				I18nMessages.INSTANCE.help_numero_cartao(), 16,
				new FormWidget.HandlerValidation<String>() {
					@Override
					public boolean handle(String valor) {
						boolean retorno = true;
						if (valor == null || valor.trim().equals("")) {
							msg.setHTML(I18nMessages.INSTANCE
									.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
											.numero_cartao()));
							retorno = false;
						} else {
							if (valor.length() > 16) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_TAMANHO_MAX_CAMPO(
												I18nMessages.INSTANCE
														.numero_cartao(), 16));
								retorno = false;
							} else {
								if (!valor.matches("\\d+")) {
									msg.setHTML(I18nMessages.INSTANCE
											.MSG_TAMANHO_MAX_CAMPO(
													I18nMessages.INSTANCE
															.numero_cartao(),
													16));
									retorno = false;
								}
							}
						}
						return retorno;
					}
				});
		private final FormTextBox txt_codSeguranca = new FormTextBox("txt_codSeguranca",
				I18nMessages.INSTANCE.help_cod_seg_cartao(), 3,
				new FormWidget.HandlerValidation<String>() {
					@Override
					public boolean handle(String valor) {
						boolean retorno = true;
						if (valor == null || valor.trim().equals("")) {
							msg.setHTML(I18nMessages.INSTANCE
									.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
											.cod_seg_cartao()));
							retorno = false;
						} else {
							if (valor.length() > 3) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_TAMANHO_MAX_CAMPO(
												I18nMessages.INSTANCE
														.cod_seg_cartao(), 3));
								retorno = false;
							} else {
								if (!valor.matches("\\d+")) {
									msg.setHTML(I18nMessages.INSTANCE
											.MSG_TAMANHO_MAX_CAMPO(
													I18nMessages.INSTANCE
															.cod_seg_cartao(),
													3));
									retorno = false;
								}
							}
						}
						return retorno;
					}
				});
		private final FormListBox lst_mesVencimento = new FormListBox("lst_mesVencimento",
				I18nMessages.INSTANCE.help_mes_vencimento_cartao(),
				I18nConstantes.INSTANCE.meses_do_ano());
		private final FormListBox lst_anoVencimento = new FormListBox("lst_anoVencimento",
				I18nMessages.INSTANCE.help_ano_vencimento_cartao(),
				I18nConstantes.INSTANCE.anos_vencimentos_cartao());

		private final VerticalPanel vPanelViewCartao = new VerticalPanel();
		private final HTML msg = new HTML();
		public ViewCartao(HTML nome) {
			super(nome);
			initWidget(vPanelViewCartao);
		}
		public void exec(){

			vPanelViewCartao.clear();
			vPanelViewCartao.add(msg);
			vPanelViewCartao.add(nome);
			Grid dadosPagamento = new Grid(6, 2);
			dadosPagamento.setHTML(0, 0, I18nMessages.INSTANCE.nome_pagante()
					+ ":");
			dadosPagamento.setWidget(0, 1, txt_nomePagante);
			dadosPagamento.setHTML(1, 0,
					I18nMessages.INSTANCE.sobrenome_pagante() + ":");
			dadosPagamento.setWidget(1, 1, txt_sobrenomePagante);
			dadosPagamento.setHTML(2, 0,
					I18nMessages.INSTANCE.bandeira_cartao() + ":");
			dadosPagamento.setWidget(2, 1, frb_bandeiraCartao);
			dadosPagamento.setHTML(3, 0, I18nMessages.INSTANCE.numero_cartao()
					+ ":");
			dadosPagamento.setWidget(3, 1, txt_numeroCartao);
			dadosPagamento.setHTML(4, 0, I18nMessages.INSTANCE.cod_seg_cartao()
					+ ":");
			dadosPagamento.setWidget(4, 1, txt_codSeguranca);
			dadosPagamento.setHTML(5, 0,
					I18nMessages.INSTANCE.data_vencimento_cartao() + ":");
			HorizontalPanel hp = new HorizontalPanel();
			hp.add(lst_mesVencimento);
			hp.add(new HTML("/"));
			hp.add(lst_anoVencimento);
			dadosPagamento.setWidget(5, 1, hp);
			vPanelViewCartao.add(dadosPagamento);

			
		}
		
		public void exec(CartaoCreditoTO cartao){
			this.txt_codSeguranca.setValue(String.valueOf(cartao.getCodigoSeguranca()));
			this.txt_nomePagante.setValue(cartao.getNomeProprietario());
			this.txt_numeroCartao.setValue(String.valueOf(cartao.getNumero()));
			this.txt_sobrenomePagante.setValue(cartao.getSobrenomeProprietario());
			
		}

		public boolean validar() {
			boolean retorno = false;

			if (txt_nomePagante.validar() && txt_sobrenomePagante.validar()
					&& frb_bandeiraCartao.validar()
					&& txt_numeroCartao.validar() && txt_codSeguranca.validar()
					&& lst_mesVencimento.validar()
					&& lst_anoVencimento.validar()) {
				retorno = true;
			}

			return retorno;
		}

		public CartaoCreditoTO criarCartaoCreditoTO() {
			CartaoCreditoTO cartaoCreditoTO = new CartaoCreditoTO();
			cartaoCreditoTO.setNomeProprietario(txt_nomePagante.getValue());
			cartaoCreditoTO.setAnoVencimento(lst_anoVencimento.getValue());
			cartaoCreditoTO.setMesVencimento(lst_mesVencimento.getValue());
			cartaoCreditoTO.setSobrenomeProprietario(txt_sobrenomePagante
					.getValue());
			cartaoCreditoTO.setCodigoSeguranca(txt_codSeguranca.getValue());
			cartaoCreditoTO.setNumero(txt_numeroCartao.getValue());
			cartaoCreditoTO.setBandeira(BandeiraCartaoCredito.getEnum(frb_bandeiraCartao.getValue()));
			return cartaoCreditoTO;
		}
		//FIM - EXERC. 6 #/

}


